МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
/
ЗВІТ
до лабораторної роботи №4
з курсу:
«ОПЕРАЦІЙНІ СИСТЕМИ»
“ Багатопотокове програмування в сучасних ОС ”
Варіант № 12
Мета: ознайомлення з поняттям багатопотоковості в сучасних операційних системах, отримання практичних навичок створення багатопотокових застосувань в середовищі Visual Studio C#.
1. Теоретичні відомості
Як відомо [1] потоком (потік керування, нитка, thread) називають набір послідовно виконуваних команд процесора, які використовують загальний адресний простір процесу. Оскільки в системі може одночасно бути багато потоків, завданням ОС є організація перемикання процесора між ними і планування їхнього виконання. У багатопроцесорних системах код окремих потоків може виконуватися на окремих процесорах.
Багатопотоковими називають програми, які одночасно виконують різні чи однотипні завдання, використовуючи при тому декілька потоків.
Розглянемо яким чином можна оптимізувати програми, використовуючи багатопоточність.
Але не завжди можна розпаралелити задачу. Не завжди є в тому сенс. Наприклад, якщо у нас є один потік даних і його необхідно обробляти в певному порядку, і при цьому без результатів попередньої обробки даних наступну операцію виконувати не можна, то в такій програмі створення додаткових потоків нічого нам не дасть.
Потоки не повинні заважати один одному і повинні використовувати ефективно ресурси системи, в якій вони працюють.
Управління багатопотоковістю.
Управління багатопотоковістю здійснює планувальник потоків, цю функцію CLR зазвичай делегує операційній системі. Планувальник потоків гарантує, що активним потокам виділяється відповідний час на виконання, а потоки, які очікують або блоковані, наприклад, на очікуванні ексклюзивної блокування, або користувача введення - не споживають часу CPU.
На однопроцесорних комп'ютерах планувальник потоків використовує квантування часу - швидке перемикання між виконанням кожного з активних
2.
потоків. Це призводить до непередбачуваного поведінки, коли кожна послідовність виконання потоків відповідає кванту часу, виділеного потоку. У Windows XP типове значення кванта часу - десятки мілісекунд - вибрано як суттєво більшу, ніж витрати CPU на перемикання контексту між потоками (декілька мікросекунд).
На багатопроцесорних комп'ютерах багатопотоковість реалізована як комбінація квантування часу і справжнього паралелізму, коли різні потоки виконують код на різних CPU. Необхідність квантування часу все одно залишається, так як операційна система повинна обслуговувати як свої власні потоки, так і потоки інших додатків.
Кажуть, що потік витісняється, коли його виконання призупиняється через зовнішні фактори типу квантування часу. У більшості випадків потік не може контролювати, коли і де він буде витіснений.
Потоки і процеси.
Всі потоки однієї програми логічно містяться в межах процесу - модуля операційної системи, в якому виповнюється додаток.
У деяких аспектах потоки і процеси схожі - наприклад, час поділяється між процесами, що виконуються на одному комп'ютері, так само, як між потоками одного C #-додатки. Ключове відмінність полягає в тому, що процеси повністю ізольовані один від одного. Потоки поділяють пам'ять (купу) з іншими потоками цього ж додатка. Завдяки цьому один потік може постачати дані у фоновому режимі, а інший - показувати ці дані по мірі їх надходження.
Використання потоків.
Типовий додаток з багатопоточністю виконує тривалі обчислення у фоновому режимі. Головний потік продовжує виконання, в той час як робочий потік виконує фонову задачу. У додатках Windows Forms, коли головний потік зайнятий тривалими обчисленнями, він не може обробляти повідомлення клавіатури і миші, і додаток перестає відгукуватися. З цієї причини слід запускати віднімають багато часу завдання в робочому потоці, навіть якщо головний потік в цей час демонструє користувачеві модальний діалог з написом
3.
"Працюю ... Будь ласка, чекайте ", так як програма не може перейти до наступної оп...